const LhzxHttpClient = require('./LhzxHttpClient');

/**
 * 云翼信短信客户端使用示例
 * 
 * 使用前请确保：
 * 1. 已获取云翼信平台分配的siid、user、secretKey
 * 2. 网络可以访问云翼信服务器
 * 3. 短信内容符合运营商规范
 */

async function sendSMSExample() {
    console.log('=== 云翼信短信发送示例 ===\n');
    
    // 创建客户端实例
    const smsClient = new LhzxHttpClient();
    
    // 配置参数 - 请替换为您从云翼信平台获取的真实参数
    const config = {
        siid: "your_siid_here",              // 客户编号（由云翼信平台分配）
        user: "your_username_here",          // HTTP账号（由云翼信平台分配）
        secretKey: "your_secret_key_here",   // 接口密钥（由云翼信平台分配）
        mobile: "13800138000",               // 目标手机号（群发用逗号分隔，最多50个）
        content: "【您的签名】您的短信内容",   // 短信内容（必须包含签名）
        extcode: "123"                       // 扩展码（可选）
    };
    
    try {
        console.log('准备发送短信...');
        console.log(`目标手机号: ${config.mobile}`);
        console.log(`短信内容: ${config.content}`);
        console.log(`扩展码: ${config.extcode}\n`);
        
        // 参数验证
        if (!smsClient.validateConfig(config)) {
            console.error('❌ 参数验证失败，请检查配置');
            return;
        }
        
        // 发送短信
        const result = await smsClient.sendSMS(config);
        
        console.log('\n=== 发送结果 ===');
        console.log('事务号:', result.transactionID);
        console.log('返回码:', result.retCode);
        console.log('返回消息:', result.retMsg);
        
        // 判断发送结果
        if (result.retCode === '0000') {
            console.log('✅ 短信发送成功！');
            console.log('💡 请注意：这只是提交成功，实际送达状态需要通过回执接口获取');
        } else {
            console.log('❌ 短信发送失败');
            console.log('错误码:', result.retCode);
            console.log('错误信息:', result.retMsg);
        }
        
    } catch (error) {
        console.error('❌ 发送失败:', error.message);
        
        // 常见错误处理建议
        if (error.message.includes('ENOTFOUND')) {
            console.log('💡 建议：检查网络连接和DNS解析');
        } else if (error.message.includes('ECONNREFUSED')) {
            console.log('💡 建议：检查服务器地址和端口是否正确');
        } else if (error.message.includes('timeout')) {
            console.log('💡 建议：检查网络延迟，可能需要重试');
        } else if (error.message.includes('certificate')) {
            console.log('💡 建议：检查SSL证书问题');
        }
    }
}

// 批量发送短信示例
async function batchSendSMSExample() {
    console.log('\n=== 批量发送短信示例 ===\n');
    
    const smsClient = new LhzxHttpClient();
    
    // 批量发送配置
    const batchConfig = {
        siid: "your_siid_here",
        user: "your_username_here", 
        secretKey: "your_secret_key_here",
        mobile: "13800138000,13900139000,13700137000", // 多个手机号用逗号分隔
        content: "【您的签名】批量发送测试短信",
        extcode: "123"
    };
    
    try {
        console.log('准备批量发送短信...');
        console.log(`目标手机号: ${batchConfig.mobile}`);
        console.log(`手机号数量: ${batchConfig.mobile.split(',').length}个`);
        console.log(`短信内容: ${batchConfig.content}\n`);
        
        const result = await smsClient.sendSMS(batchConfig);
        
        console.log('批量发送结果:');
        console.log('事务号:', result.transactionID);
        console.log('返回码:', result.retCode);
        console.log('返回消息:', result.retMsg);
        
    } catch (error) {
        console.error('批量发送失败:', error.message);
    }
}

// 参数验证示例
function validateParametersExample() {
    console.log('\n=== 参数验证示例 ===\n');
    
    const smsClient = new LhzxHttpClient();
    
    // 测试各种参数验证情况
    const testCases = [
        {
            name: '正常参数',
            config: {
                siid: "TEST001",
                user: "testuser",
                secretKey: "testkey",
                mobile: "13800138000",
                content: "【测试】正常短信"
            }
        },
        {
            name: '缺少必要参数',
            config: {
                siid: "TEST001",
                user: "testuser",
                // 缺少secretKey
                mobile: "13800138000",
                content: "【测试】缺少参数"
            }
        },
        {
            name: '手机号格式错误',
            config: {
                siid: "TEST001",
                user: "testuser",
                secretKey: "testkey",
                mobile: "1380013800", // 长度不正确
                content: "【测试】手机号错误"
            }
        },
        {
            name: '手机号数量超限',
            config: {
                siid: "TEST001",
                user: "testuser",
                secretKey: "testkey",
                mobile: Array.from({length: 51}, (_, i) => `1380013${String(i).padStart(4, '0')}`).join(','),
                content: "【测试】数量超限"
            }
        }
    ];
    
    testCases.forEach(testCase => {
        console.log(`测试: ${testCase.name}`);
        const isValid = smsClient.validateConfig(testCase.config);
        console.log(`结果: ${isValid ? '✅ 通过' : '❌ 失败'}`);
        console.log();
    });
}

// 运行示例
async function runExamples() {
    console.log('云翼信短信接口 Node.js 客户端使用示例\n');
    console.log('注意：运行前请先配置正确的siid、user、secretKey参数\n');
    
    // 参数验证示例
    validateParametersExample();
    
    // 如果需要发送真实短信，请取消下面的注释并配置正确参数
    // await sendSMSExample();
    // await batchSendSMSExample();
    
    console.log('示例运行完成！');
    console.log('\n使用说明:');
    console.log('1. 替换配置中的siid、user、secretKey为真实值');
    console.log('2. 修改目标手机号和短信内容');
    console.log('3. 取消相应函数调用的注释');
    console.log('4. 运行 node yunyx_sms_client.js');
}

// 运行示例
if (require.main === module) {
    runExamples();
}

// 导出函数供其他模块使用
module.exports = {
    sendSMSExample,
    batchSendSMSExample,
    validateParametersExample
}; 